RESTful Web Services-এ error handling একটি গুরুত্বপূর্ণ অংশ, কারণ এটি API ব্যবহারকারীদের পরিষ্কার এবং বোধগম্য তথ্য সরবরাহ করতে সহায়ক। যখন কোনো রিকোয়েস্ট সঠিকভাবে প্রক্রিয়া করা যায় না, তখন সেই বিষয়ে সঠিক বার্তা এবং HTTP স্টেটাস কোড ফেরত পাঠানো প্রয়োজন হয়।
Apache CXF এর মাধ্যমে RESTful ওয়েব সার্ভিসে custom error handling বাস্তবায়ন করা যায়, যাতে প্রতিটি ব্যতিক্রম বা ত্রুটি উপযুক্ত HTTP স্ট্যাটাস কোড এবং কাস্টম মেসেজ সহ ক্লায়েন্টকে ফেরত পাঠানো হয়। এতে API ব্যবহারকারীরা ত্রুটির ধরন সহজেই বুঝতে পারেন এবং পরবর্তী পদক্ষেপ নিতে পারেন।
Apache CXF তে RESTful ওয়েব সার্ভিসে কাস্টম ত্রুটি হ্যান্ডলিং কনফিগার করার জন্য ExceptionMapper ক্লাস ব্যবহার করা হয়। এই ক্লাসটি ব্যতিক্রমগুলি কাস্টম HTTP স্টেটাস কোড এবং মেসেজের সাথে সঠিকভাবে মানচিত্রিত করে।
Apache CXF এর মধ্যে ExceptionMapper একটি ইন্টারফেস যা ব্যতিক্রমের ধরণ (Exception Type) এবং HTTP রেসপন্স কোড সেট করে।
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
public class CustomExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Throwable exception) {
// Custom Error Handling Logic
String errorMessage = "Something went wrong!";
int statusCode = Response.Status.INTERNAL_SERVER_ERROR.getStatusCode();
// If the exception is a specific one, return a custom message and status code
if (exception instanceof NullPointerException) {
errorMessage = "Null value encountered!";
statusCode = Response.Status.BAD_REQUEST.getStatusCode();
} else if (exception instanceof IllegalArgumentException) {
errorMessage = "Invalid argument provided!";
statusCode = Response.Status.BAD_REQUEST.getStatusCode();
}
// Create a custom response with the status code and error message
return Response.status(statusCode)
.entity(new ErrorResponse(errorMessage))
.type(MediaType.APPLICATION_JSON)
.build();
}
}
এখানে:
toResponse()
মেথডটি ব্যতিক্রম গ্রহণ করে এবং সেগুলিকে একটি Response অবজেক্টে রূপান্তরিত করে, যেখানে একটি কাস্টম ত্রুটি বার্তা এবং স্ট্যাটাস কোড রয়েছে।ErrorResponse
ক্লাসটি ত্রুটির বার্তা এবং স্ট্যাটাস কোড সংরক্ষণ করবে এবং রেসপন্সে ফেরত পাঠাবে।
public class ErrorResponse {
private String message;
public ErrorResponse(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
এই ক্লাসটি কাস্টম ত্রুটি বার্তা ধারণ করে এবং JSON ফরম্যাটে রেসপন্স হবে।
ExceptionMapper
ক্লাসটি Apache CXF এর JAX-RS রিসোর্সে রেজিস্টার করতে হবে। সাধারণত এই ক্লাসটি ApplicationConfig ফাইলে বা ওয়েব সার্ভিস রিসোর্স ক্লাসের মধ্যে রেজিস্টার করা হয়।
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import javax.ws.rs.ext.Provider;
@ApplicationPath("/api")
@Provider
public class ApplicationConfig extends Application {
public ApplicationConfig() {
// Register Exception Mapper for Custom Error Handling
register(CustomExceptionMapper.class);
}
}
এখানে:
@Provider
অ্যানোটেশন দিয়ে CustomExceptionMapper ক্লাসটি JAX-RS কনটেইনারে রেজিস্টার করা হয়, যাতে এটি REST API-এর ব্যতিক্রম হ্যান্ডলিং করতে পারে।কাস্টম error handling এ HTTP status codes ব্যবহার খুবই গুরুত্বপূর্ণ, কারণ এই কোডগুলি ক্লায়েন্টকে ত্রুটির ধরণ জানিয়ে দেয়। কিছু সাধারণ HTTP স্ট্যাটাস কোড হলো:
আপনার কাস্টম error handler এ এই কোডগুলো রিটার্ন করতে হবে, যাতে ইউজার ত্রুটির কারণে কী হয়েছে তা সঠিকভাবে জানে।
ধরা যাক, একটি POST রিকোয়েস্ট পাঠানো হয়েছে এবং সেখানে Invalid Input দেওয়া হয়েছে। এর জন্য কাস্টম ত্রুটি বার্তা এবং 400 স্ট্যাটাস কোড ফেরত পাঠানো হতে পারে:
{
"message": "Invalid input provided, please check your data."
}
এভাবে JSON ফরম্যাটে পরিষ্কার এবং তথ্যপূর্ণ ত্রুটি বার্তা পাঠানো হয়, যা ব্যবহারকারীর জন্য অধিক সহায়ক।
RESTful ওয়েব সার্ভিসে কাস্টম error handling নিশ্চিত করতে, ExceptionMapper ব্যবহার করে আমরা ব্যতিক্রমগুলোকে কাস্টম HTTP স্ট্যাটাস কোড এবং মেসেজে রূপান্তরিত করতে পারি। এর মাধ্যমে API ব্যবহারকারীরা যে ত্রুটির সম্মুখীন হচ্ছেন তা পরিষ্কারভাবে বুঝতে পারবেন, এবং ডেভেলপাররা দ্রুত সমস্যার সমাধান করতে সক্ষম হবেন।